.. :validated: 3.2.0

Архитектура и компоненты модуля синхронизации
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Диаграмма контейнеров
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Архитектура модуля синхронизации построена по принципу взаимодействия независимых сервисов, выполняющих сбор, обработку и применение изменений в доменах. 
Общая структура подсистемы представлена на следующей диаграмме.

.. figure:: images/49.png
    :name: рис. 5.6
    :scale: 50

``syncer-pwdsync`` - Сервис выполняет синхронизацию паролей пользователей
между доменами.

``syncer-watcher`` - Сервис производит выгрузку изменений из домена в базу
данных, для дальнейшего обновления состояния синхронизируемых объектов в
контроллере домена.

``syncer-loadrunner`` - Сервис применяет накопленные изменения из базы
данных в контроллере домена.

В дополнение к диаграмме контейнеров, следующая таблица содержит расшифровку потоков взаимодействия между сервисами модуля синхронизации, их адресатами и используемыми протоколами передачи данных.

.. list-table::
   :header-rows: 1
   :class: longtable
   :widths: 20 20 10 50

   * - Инициатор информационного обмена
     - Адресат информационного обмена
     - Протокол
     - Передаваемая информация
   * - Портал управления
     - WebUI
     - HTTPS
     - Управление подсистемой и запись команд управления
   * - Портал управления
     - PostgreSQL
     - PSQL
     - Управление подсистемой и получение состояния подсистемы
   * - syncer-pwdsync
     - PostgreSQL
     - PSQL
     - Хранение данных синхронизации
   * - syncer-pwdsync
     - Active Directory
     - LDAPS
     - Выгрузка и установка паролей пользователей домена
   * - syncer-pwdsync
     - dirsrv@REALM
     - LDAPS
     - Выгрузка и загрузка данных синхронизации
   * - syncer-watcher
     - PostgreSQL
     - PSQL
     - Хранение данных синхронизации
   * - syncer-watcher
     - Active Directory
     - LDAPS
     - Выгрузка объектов домена
   * - syncer-watcher
     - dirsrv@REALM
     - LDAPS
     - Выгрузка объектов домена
   * - syncer-loadrunner
     - WebUI
     - HTTPS
     - Установка данных синхронизации
   * - syncer-loadrunner
     - Active Directory
     - LDAPS
     - Выгрузка и загрузка данных синхронизации
   * - syncer-loadrunner
     - dirsrv@REALM
     - LDAPS
     - Выгрузка и загрузка данных синхронизации
   * - syncer-loadrunner
     - PostgreSQL
     - PSQL
     - Хранение данных синхронизации
   * - WebUI
     - dirsrv@REALM
     - LDAPS
     - Управление объектами домена


Функции компонентов
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Основная функция модуля синхронизации - однонаправленная синхронизация
объектов (пользователь, группа пользователей и подразделение) из
**LDAP**-источника в целевой **LDAP**, с сохранением иерархии. Обратная
синхронизация возможна только для паролей пользователей и реализована
отдельным сервисом.
Все сервисы при работе с любым источником данных (**LDAP** каталог или кеш в
**PostgreSQL**) используют запросы которые возвращают 1000 объектов без
сегментирования (непрерывное множество). Это условие выполняется для
всех источников данных с настройками по умолчанию.

**syncer-watcher**

Сервис формирует кеш объектов в БД **PostgreSQL**  без каких либо
модификаций. Для исключения возможности пропуска изменений в
**LDAP**-источнике (**MS AD Domain Services**, **DS**) все объекты читаются в соответствии с
увеличением значения их ``usnChanged``. Каждый обновленный сервисом объект в
кеше  получает значение ``sync_status=3``, что представляет собой битовое
поле из 2 бит: ``0b11``. Первый бит определяет состояние ссылочной
целостности по атрибуту member, второй бит - по атрибуту ``rbtadp``.

**syncer-loadrunner**

Сервис, следуя в порядке увеличения значений ``usnChanged`` в кеше: создает,
обновляет и удаляет объекты в соответствии с правилами транслитерации и
замены символов. Обработка объектов осуществляется отдельно для каждой
точки синхронизации с отдельными счетчиками ``usnChanged``.

После обновления объекта сервис перейдет, в рамках той же точки
синхронизации, к восстановлению ссылочной целостности для атрибутов
``member`` и ``rbtadp``. При успешном восстановлении значений атрибутов,
соответствующий бит сбрасывается в ``sync_status`` (операция XOR по маске).

**syncer-pwdsync**

Сервис не использует кеш в БД PostgreSQL, а оперирует атрибутами
``userParameters`` (**MS AD DS**) и epwd (**ALD Pro**). Выборка объектов происходит
по очередно из каждого **LDAP** каталога по наличию атрибутов ``userParameters``
и ``epwd`` в соответствии с увеличением значения ``usn``. Для соблюдения политик
паролей, при возвращении пароля из одного **LDAP** каталога в другой, в том
числе обновляется соответствующий атрибут даты изменения пароля. Для
корректной работы механизма срока истечения действия пароля, политики
паролей в **LDAP** каталогах должны быть идентичны.